package pruebas;

import junit.framework.TestCase;
import java.util.ArrayList;
import juego.AvionCivil;
import juego.Botin;
import juego.Coordenada;
import juego.Energia;
import juego.Impacto;
import juego.Laser;
import juego.Movil;
import juego.Proyectil;
import juego.TorpedoRastreador;
import juego.Helicoptero;
import juego.Cohete;
import juego.Torpedo;


public class TestTorpedoRastreador extends TestCase {

	
	public void testAusenciaEnemigos(){
		ArrayList<Movil> listaDeObjetos = new ArrayList<Movil>();
		ArrayList<Botin> listaDeBotines = new ArrayList<Botin>();
		
		Coordenada coordT1 = new Coordenada(0,40);
		TorpedoRastreador t1 = new TorpedoRastreador(coordT1);
		listaDeObjetos.add(t1);
		
		int puntaje = (t1.vivir(listaDeObjetos,listaDeBotines));
		assertTrue(puntaje == 0);
		
		Coordenada coord1 = t1.verUbicacion();
		int x1 = coord1.obtenerCoordenadaX();
		int y1 = coord1.obtenerCoordenadaY();
		assertTrue(x1 == (0));
		assertTrue(y1 == (30));
		
		Coordenada coordL1 = new Coordenada(10,30);
		Laser l1 = new Laser(coordL1);
		
		Helicoptero h1 = new Helicoptero(-10,30);
		
		AvionCivil a1 = new AvionCivil(0,40);
		
		listaDeObjetos.add(l1);
		listaDeObjetos.add(h1);
		listaDeObjetos.add(a1);
		
		puntaje = (t1.vivir(listaDeObjetos,listaDeBotines));
		assertTrue(puntaje == 0);
		
		Coordenada coord2 = t1.verUbicacion();
		int x2 = coord2.obtenerCoordenadaX();
		int y2 = coord2.obtenerCoordenadaY();
		assertTrue(x2 == (0));
		assertTrue(y2 == (20));	
		
	}
	
	public void testAusenciaEnemigos2(){
		ArrayList<Movil> listaDeObjetos = new ArrayList<Movil>();
		ArrayList<Botin> listaDeBotines = new ArrayList<Botin>();
		
		Coordenada coordT1 = new Coordenada(0,20);
		TorpedoRastreador t1 = new TorpedoRastreador(coordT1);
		t1.hacerLeal();
		listaDeObjetos.add(t1);
		
		int puntaje = (t1.vivir(listaDeObjetos,listaDeBotines));
		assertTrue(puntaje == 0);
		
		Coordenada coord1 = t1.verUbicacion();
		int x1 = coord1.obtenerCoordenadaX();
		int y1 = coord1.obtenerCoordenadaY();
		assertTrue(x1 == (0));
		assertTrue(y1 == (20));
		
		Coordenada coordT2 = new Coordenada(10,30);
		TorpedoRastreador t2 = new TorpedoRastreador(coordT2);
		t2.hacerLeal();
		listaDeObjetos.add(t2);
		
		Coordenada coordT3 = new Coordenada(-10,30);
		TorpedoRastreador t3 = new TorpedoRastreador(coordT3);
		t3.hacerLeal();
		listaDeObjetos.add(t3);
		
		int puntaje2 = (t1.vivir(listaDeObjetos,listaDeBotines));
		assertTrue(puntaje2 == 0);
		
		Coordenada coord2 = t1.verUbicacion();
		int x2 = coord2.obtenerCoordenadaX();
		int y2 = coord2.obtenerCoordenadaY();
		assertTrue(x2 == (0));
		assertTrue(y2 == (20));
		
	}
	
	public void testImpactoProvocado(){
		
		Coordenada lugar = new Coordenada (0,20);
		Proyectil proyectil = new TorpedoRastreador(lugar);
		Energia energia = new Energia(10);
		Impacto impacto = proyectil.impactoProvocado();
		impacto.herir(energia);
		assertEquals(1, energia.verEnergia());
	};
	
	public void testPresenciaEnemigos(){
		ArrayList<Movil> listaDeObjetos = new ArrayList<Movil>();
		ArrayList<Botin> listaDeBotines = new ArrayList<Botin>();
		
		Coordenada coordT1 = new Coordenada(0,8);
		TorpedoRastreador t1 = new TorpedoRastreador(coordT1);
		t1.hacerLeal();
		listaDeObjetos.add(t1);
		assertEquals(0,t1.verUbicacion().obtenerCoordenadaX());
		assertEquals(8,t1.verUbicacion().obtenerCoordenadaY());
		
		Coordenada coordL1 = new Coordenada(-20,30);
		Laser l1 = new Laser(coordL1);
		l1.hacerLeal();
		listaDeObjetos.add(l1);
	
		Helicoptero h1 = new Helicoptero(4,7);
		listaDeObjetos.add(h1);
		
		AvionCivil a1 = new AvionCivil(0,50);
		listaDeObjetos.add(a1);
		
		int puntaje = (t1.vivir(listaDeObjetos,listaDeBotines));
		assertTrue(puntaje == 0);
		
		Coordenada coord1 = t1.verUbicacion();
		int x1 = coord1.obtenerCoordenadaX();
		int y1 = coord1.obtenerCoordenadaY();
		assertTrue(t1.estaVivo());
		assertEquals(0,x1);
		assertEquals(428,y1);
		
		int puntaje2 = (t1.vivir(listaDeObjetos,listaDeBotines));
		assertTrue(puntaje2 == 0);
		
		Coordenada coord2 = t1.verUbicacion();
		int x2 = coord2.obtenerCoordenadaX();
		int y2 = coord2.obtenerCoordenadaY();
	
		assertTrue(x2 == 40);
		assertTrue(y2 == -3782);
		
		for (int i = 1; i<=4; i++){
		puntaje2 = t1.vivir(listaDeObjetos, listaDeBotines);
		}
		
		assertEquals(-300,puntaje2);
		assertTrue((listaDeObjetos.size()) == 2);
		
		assertFalse(listaDeObjetos.contains(t1)); 
		assertFalse(t1.estaVivo());
		assertTrue(listaDeObjetos.contains(h1)); 
		assertTrue(listaDeObjetos.contains(l1)); 
		assertFalse(listaDeObjetos.contains(a1));
		assertFalse(a1.estaVivo());
		
		
	}

	public void testPresenciaEnemigos2(){
		
		ArrayList<Movil> listaDeObjetos = new ArrayList<Movil>();
		ArrayList<Botin> listaDeBotines = new ArrayList<Botin>();
		
		Coordenada coordT1 = new Coordenada(-17,30);
		TorpedoRastreador t1 = new TorpedoRastreador(coordT1);
		t1.hacerLeal();
		listaDeObjetos.add(t1);
		
		Coordenada coordL1 = new Coordenada(-18,30);
		Laser l1 = new Laser(coordL1);
		l1.hacerLeal();
		listaDeObjetos.add(l1);
	
		Coordenada coordH1 = new Coordenada(0,30);
		Cohete h1 = new Cohete(coordH1);
		h1.hacerLeal();
		listaDeObjetos.add(h1);
		
		Coordenada coordA1 = new Coordenada(3,4);
		Torpedo a1 = new Torpedo(coordA1);
		a1.hacerLeal();
		listaDeObjetos.add(a1);
		
		int puntaje = (t1.vivir(listaDeObjetos,listaDeBotines));
		assertTrue(puntaje == 0);
		
		Coordenada coord1 = t1.verUbicacion();
		int x1 = coord1.obtenerCoordenadaX();
		int y1 = coord1.obtenerCoordenadaY();
		assertTrue(x1 == (-17));
		assertTrue(y1 == (30));
		
		assertTrue((listaDeObjetos.size()) == 4);
		
		assertTrue(listaDeObjetos.contains(t1)); 
		assertTrue(listaDeObjetos.contains(h1)); 
		assertTrue(listaDeObjetos.contains(l1));
		assertTrue(listaDeObjetos.contains(a1));

		
	} 

}
